# 面向对象
只是语法糖,内部还是使用 Prototype 实现
# class
class Emp {
// 构造函数
constructor(name, age) {
this.name = name;
this.age = age;
}
// 普通方法
signIn() {
console.log(this.name + "打卡上班");
}
// 属性的 getter setter,实际调用属性不是方法
get info() {
return this.name + " " + this.age;
}
set info(info) {
let [name, age] = info.split(" ");
this.name = name;
this.age = age;
}
}
var emp = new Emp("conan", 11);
console.log(emp); // Emp {name: "conan", age: 11}
emp.signIn(); // conan打卡上班
console.log(emp.info); // conan 11
emp.info = "lan 18";
console.log(emp.info); // lan 18
# extends
class Emp {
// 构造函数
constructor(name, age) {
this.name = name;
this.age = age;
}
// 普通方法
signIn() {
console.log(this.name + "打卡上班");
}
// 属性的 getter setter,实际调用属性不是方法
get info() {
return this.name + " " + this.age;
}
set info(info) {
let [name, age] = info.split(" ");
this.name = name;
this.age = age;
}
}
// 只能单继承
class Manager extends Emp {
constructor(name, age, dept) {
super(name, age);
this.dept = dept;
}
signIn() {
super.signIn();
console.log("经理主持会议");
}
}
// var manager = new Manager("kid", 20);// 不建议在子类没有构造函数时这样调用,应给子类添加构造函数
var manager = new Manager("kid", 20, "技术部"); // 不建议在子类没有构造函数时这样调用,应给子类添加构造函数
console.log(manager); // Manager {name: "kid", age: 20, dept: "技术部"}
manager.signIn();
// kid打卡上班
// 经理主持会议
# 成员变量 ⚠️
还没发布,只有部分浏览器支持,或使用babel转换
class Employee {
company = "qq";
constructor(name) {
this.name = "hello" + name;
}
}
var emp = new Employee("conan");
console.log(emp.company); // qq
console.log(new Employee("haha").company); // qq
# 静态成员 ⚠️
还没发布,只有部分浏览器支持,或使用babel转换
只能通过类来调用
class Ticket {
static count = 0;
constructor(name) {
this.name = name + "卖票了";
}
}
var t1 = new Ticket("conan");
Ticket.count++;
console.log(Ticket.count);
# 私有成员 ⚠️
略
← 标准内置对象—Map 异常 →